# 导包
import json
import logging

from api.base_service import BaseService


class MemberServiceApi(BaseService):

    def __init__(self):
        # 从父辈继承它的实例属性
        super().__init__()
        # 创建自己的实例属性
        self.service_name = "MemberService"
        self.func_name_find = "findByTelephone"
        self.func_name_add = "add"
        self.func_name_count = "findMemberCountByMonths"

    def find_by_tel(self, tel):
        # 通过invoke函数来访问接口-服务名、函数名、参数
        res = self.dubboclt.invoke(self.service_name, self.func_name_find, tel)

        # 打印响应结果
        logging.info(f"响应结果的类型==={type(res)}")
        logging.info(f"响应结果==={res}")

        # json.loads()的作用是还原一个字符串为它原本的类型，
        # 如果原本的类型为字典，则还原为字典；如果为列表或者元组，则还原为列表或者元组;如果为null，则返回None

        res_after = json.loads(res)
        logging.info(f"转换后的响应结果类型==={type(res_after)}")
        logging.info(f"转换后的响应结果==={res_after}")
        return res_after

    def add(self, member):

        # 需要额外添加一个class键值对
        member["class"] = "com.itheima.pojo.Member"
        # 通过invoke函数来访问接口-服务名、函数名、参数
        res = self.dubboclt.invoke(self.service_name, self.func_name_add, member)

        # 打印响应结果
        logging.info(f"响应结果的类型==={type(res)}")
        logging.info(f"响应结果==={res}")

        # 如果返回No说明失败
        if res == "No":
            return False
        else:
            return True

    def count(self, months):

        # 使用实例，调用invoke（服务名、函数名、实参）
        res = self.dubboclt.invoke(self.service_name, self.func_name_count, months)

        # 获取并打印响应结果
        logging.info("响应结果的数据类型==={type(res)}")
        logging.info("响应结果==={res}")



